package com.gm.wholesale.module.voice;

import android.content.Context;
import android.os.Bundle;

import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.youth.banner.util.LogUtils;

public class VoiceManger {
    private static SpeechRecognizer mIat;

    public static void init(Context context) {
        if (mIat == null) {
            mIat = SpeechRecognizer.createRecognizer(context, new InitListener() {
                @Override
                public void onInit(int i) {
                    LogUtils.d("onInitonInit: " + i);
                }
            });
            //设置语法ID和 SUBJECT 为空，以免因之前有语法调用而设置了此参数；或直接清空所有参数，具体可参考 DEMO 的示例。
            mIat.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
            mIat.setParameter(SpeechConstant.SUBJECT, null);
          //设置返回结果格式，目前支持json,xml以及plain 三种格式，其中plain为纯听写文本内容
            mIat.setParameter(SpeechConstant.RESULT_TYPE, "plain");
         //此处engineType为“cloud”
            //  mIat.setParameter( SpeechConstant.ENGINE_TYPE, engineType );
       //设置语音输入语言，zh_cn为简体中文
            mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
        //设置结果返回语言
            mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
        // 设置语音前端点:静音超时时间，单位ms，即用户多长时间不说话则当做超时处理
        //取值范围{1000～10000}
            mIat.setParameter(SpeechConstant.VAD_BOS, "10000");
        //设置语音后端点:后端点静音检测时间，单位ms，即用户停止说话多长时间内即认为不再输入，
        //自动停止录音，范围{0~10000}
            mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
            //设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
            mIat.setParameter(SpeechConstant.ASR_PTT, "0");
        }
    }

    // todo 开始语音输入检测
    public synchronized static void startVoice(Context context, IVoiceListener listener) {
        //初始化识别无UI识别对象
        //使用SpeechRecognizer对象，可根据回调消息自定义界面；
        if (mIat == null) {
            init(context);
        }

        //开始识别，并设置监听器
        mIat.startListening(new RecognizerListener() {
            @Override
            public void onVolumeChanged(int i, byte[] bytes) {
                listener.onVolumeChanged();
            }

            @Override
            public void onBeginOfSpeech() {

            }

            @Override
            public void onEndOfSpeech() {
                listener.onEndOfSpeech();
            }

            @Override
            public void onResult(RecognizerResult recognizerResult, boolean b) {
                listener.onResult(recognizerResult.getResultString());

            }

            @Override
            public void onError(SpeechError speechError) {
                listener.onError(speechError.getErrorDescription());

            }

            @Override
            public void onEvent(int i, int i1, int i2, Bundle bundle) {
            }
        });
    }

    public static void stop() {
        if (mIat != null) {
            mIat.stopListening();
        }
    }

    public static void destory() {
        if (mIat != null) {
            stop();
            mIat = null;
        }
    }

}
